package cn.cxy.roomdemo

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

/**
 * 数据库类，用于创建数据库及对所有数据库表进行操作。
 * 所有的数据库表类都放在entities里,通过逗号分隔；
 * version表示当前的数据库版本号，如果应用发布后，又对数据库结构做了修改，则需要变更版本号(一般加1即可)
 */
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
    //所有数据库表操作类都放在这里
    abstract val userDao: UserDao

    companion object {
        //自定义数据库文件名，只要在应用内不存在多个同名的数据库文件即可。
        private const val DATABASE_NAME = "user_database"

        @Volatile
        private var instance: AppDatabase? = null

        @Synchronized
        fun getInstance(context: Context) =
            instance
                ?: buildDatabase(context)
                    .also { instance = it }

        private fun buildDatabase(context: Context) =
            Room.databaseBuilder(context, AppDatabase::class.java,
                DATABASE_NAME
            ).build()
    }
}